www.heap.pl piotrmarczewski@tlen.pl 1. Wybrać numery departamentów, nazwiska pracowników oraz numery pracownicze ich szefów z tabeli employees. 2. Połączyć numer pracownika i nazwisko i opatrzyć je nagłówkiem Zatrudniony. 3. pokaż w 2 kolumnach: 1 kolumna: połączony numer i nazwisko pracownika z naglowkiem dane, 2 kolumna: tekst „Pracownik pracuje w dziale nr” i numer działu z nagłówkiem „Dział”. 4. Wyświetlić wszystkie numery departamentów występujące w tabeli employees. 5. Wyświetlić wszystkie wzajemnie różne numery departamentów występujące w tabeli employees. 6. Wybrać wszystkie unikatowe kombinacje DEPARTMENT_ID i JOB_ID. 7. Posortować malejąco wszystkie dane tabeli employees według daty zatrudnienia począwszy od ostatnio zatrudnionych. 8. Posortować dane tabeli employees według wzrastającej wartości kolumny DEPARTMENT_ID oraz malejących wartości kolumny SALARY. 9. Wybrać nazwiska, numery pracowników, stanowiska pracy, płacę i numery departamentów wszystkich zatrudnionych na stanowisku CLERK (może być coś za albo przed tą nazwą). 10. Wybrać wszystkie nazwy i numery departamentów większe od 20. 11. Wybrać dane tych pracowników, których nazwiska są czteroliterowe, nie używając funkcji zwracającej długości napisu. 12*. Wybrać dane tych pracowników, którzy nie posiadają szefa. SELECT * FROM employees WHERE manager_id IS NULL; 12a*. Wybrać dane tych pracowników, którzy posiadają szefa. SELECT * FROM employees WHERE NOT (manager_id IS NULL); SELECT * FROM employees WHERE manager_id IS NOT NULL; 13*. Wybrać dane tych pracowników, których zarobki są poza przedziałem <4000, 5000>. WHERE NOT ( salary BETWEEN 4000 AND 5000 ); WHERE salary NOT BETWEEN 4000 AND 5000; WHERE salary<4000 OR salary>5000; 14*. Wybrać dane tych pracowników, których nazwiska nie zaczynają się na M. WHERE NOT ( last_name LIKE 'M%'); WHERE last_name NOT LIKE 'M%'; WHERE last_name < 'M' or last_name >= 'N'; 15. Wybrać dane tych pracowników zatrudnionych na stanowisku CLERK, których zarobki mieszczą się w przedziale <4000, 5000>. 16. Wybrać wszystkich pracowników zatrudnionych na stanowisku MAN lub na stanowisku FI_MGR z pensją powyżej 1500. 17. Wybrać wszystkich pracowników zatrudnionych na stanowisku MGR ze wszystkich departamentów wraz ze wszystkimi pracownikami zatrudnionymi na stanowisku CLERK w departamencie 10. 18. Wybrać dane pracowników zatrudnionych w departamentach o numerach 10 i 20 w kolejności alfabetycznej ich nazwisk. ------ 21. Wybierz nazwiska wszystkich pracowników wraz z numerami i nazwami departamentów w których są zatrudnieni. 22. Dla pracowników o MIESIĘCZNEJ pensji powyżej 1500 podaj ich nazwiska, miejsca usytuowania ich departamentów oraz nazwy tych departamentów. 23. Dla każdego pracownika wypisz jego nazwisko, nazwę departamentu oraz nazwisko i nazwę departamentu jego kierownika. SELECT prac.last_name, depPrac.department_name, szef.last_name, depSzef.department_name FROM employees prac INNER JOIN employees szef ON prac.manager_id = szef.employee_id INNER JOIN departments depPrac ON depPrac.departmnet_id = prac.department_id INNER JOIN deoartments depSzef ON depSzef.department_id = szef.department_id; 24. Wypisz nazwy stanowisk występujące w dziale IT lub Administration SELECT DISTINCT job_title FROM jobs j INNER JOIN employees e ON j.job_id = e.job_id INNER JOIN departmnets d ON d.department_id = e.departmnet_id WHERE department_name = 'IT' OR ddepartment_name = 'Administartion' WHERE department_name IN ('IT', 'Administartion') UNION, UNION ALL, INTERSECT, MINUS 25. Wypisz job_id występujące jednocześnie w dziale 10 i 30 SELECT job_id as stan FROM employees WHERE departmnet_id = 20 UNION SELECT job_id FROM employees WHERE departmnet_id = 30 ORDER BY 1; 26. Wypisz stanowiska występujące w dziale 10 ale nie występujące w dziale 30 27. Wypisz nazwisko i numer departamentu z departementów 20 i 30, ale dla rekordów z departementu 30 nie wypisuj nazwisk (zastąp je pustym miejscem). SELECT last_name, departmnet_id FROM employees WHERE department_id = 20 UNION SELECT 'xxxxxxxx', departmnet_id FROM employees WHERE department_id = 30; --- 31. Znajdź minimalne zarobki na stanowisku MGR. 32. Znajdź ilu pracowników zatrudniono w departamencie 20. 33. Obliczyć średnie zarobki na każdym ze stanowisk pracy z wyjątkiem stanowiska MGR. 34. Obliczyć średnie zarobki na każdym ze stanowisk: IT_PROG, PU_CLERK, ST_MAN, AD_VP. ( w jednym zapytaniu ) 35. Wybrać średnie zarobki tylko tych departamentów, które zatrudniają więcej niż trzech pracowników. 36. Wybrać tylko te stanowiska, na których średni zarobek wynosi 10000 lub więcej. 37. Wyświetl osoby, których nazwiska powtarzają się 38. dla każdego pracownika podaj jego pensję oraz średnią pensję jego podwładnych 39. Wypisz ilu pracowników ma dział mający siedzibę w Toronto. 40. Wypisz najwyższą średnią podstawa w dziale ( 1 liczba ). SELECT avg(salary) FROM employees group by department_id; SELECT FROM WHERE GROUP BY HAVING ORDER BY --- 41. Znaleźć pracowników z pensją równą minimalnemu zarobkowi w firmie. 42. Znaleźć pracowników zatrudnionych na tym samym stanowisku co Himuro. 43. Wypisz numery departamentu w którym pracują osoby o podstawie pow. 15000 44. znajdź numer osoby która zostala zatrudniona jako piersza 45. Znaleźć pracowników o pensjach z listy najniższych zarobków osiąganych w departamentach. select MIN(SALARY) from EMPLOYEES group by department_id; 46. wyświetl numer departamentu w którym średnia pensja jest najniższa. SELECT DEPARTMENT_ID, avg(salary) FROM employees e group by department_id HAVING avg(salary) = (SELECT min(avg(salary)) FROM employees group by department_id); 47. wyświetl nazwę departamentu w którym znajduje się osoba zarabiająca najmniej. 48. na którym stanowisku (job_id) znajdziesz osoby zarabiające powyżej średniej. 49. wyświetl departamenty w których pracownicy dostają premię ( prowizję ) SELECT department_name FROM departmnets WHERE departmnet_id IN ( SELECT department_id FROM employees e WHERE commission_pct IS NOT NULL); SELECT DISTINCT departmnet_name FROM employees e INNER JOIN departments d ON e.department_id = d.departmnet_id WHERE commission_pct IS NOT NULL; 50. wyświetl departamenty w których nie ma osób na stanowisku MGR SELECT departmnet_name FROM departmnets d WHERE departmnet_id NOT IN ( SELECT department_id FROM employees e WHERE job_id LIKE '%MGR%'); SELECT department_id FROM employees MINUS SELECT department_id FROM employees WHERE job_id LIKE '%MGR%'; SELECT department_id FROM employees WHERE job_id NOT LIKE '%MGR%'; 51. wyświetl osoby, których premia (%) jest różna od premii(%) osób z działu 20 52*.Znaleźć pracowników o najniższych zarobkach w ich departamentach ( porównanie par ) 53. wybrać pracowników zarabiających powyżej najwyższego zarobku z depart. 30. SELECT * FROM emplyees WHERE salary > (SELECT max(salary) FROM employees WHERE department_id = 30); SELECT * FROM emplyees WHERE salary >=ALL (SELECT salary FROM employees WHERE department_id = 30); ALL Wyniki ANY Wyniki >ALL(1,2,3) >3 >ANY(1,2,3) >1 (pensja osoby o numerze 203); 58. wypisać nazwy działów w których pracują urzędnicy (CLERK). -- 61. Znaleźć pracowników, którzy zarabiają najwięcej w swoich departamentach. SELECT last_name, e.department_id FROM employees e WHERE salary = ( SELECT max(salary) FROM employees f WHERE f.department_id = e.department_id); 62. Znaleźć pracowników, którzy zarabiają powyżej średniej w ich departamentach. SELECT last_name, e.department_id FROM employees e WHERE salary > ( SELECT avg(salary) FROM employees f WHERE f.department_id = e.department_id); 63. znajdź najlepiej zarabiające osoby na każdym ze stanowisk 64.*dla każdego miasta znajdź departament w którym zarobki są najwyższe 65. Znaleźć pracowników, którzy posiadają podwładnych SELECT s.last_name, p.last_name SELECT DISTINCT s.last_name, count(p.employee_id) FROM employees s LEFT JOIN employees p ON p.manager_id = s.employee_id WHERE p.last_name IS NOT NULL GROUP BY s.last_name; za pomocą predykatu EXISTS (NOT EXISTS). SELECT last_name FROM employees szef WHERE EXISTS ( SELECT 1 FROM employees prac WHERE prac.manager_id = szef.employee_id); 65. pracownicy, których departament nie występuje w tabeli Departments. SELECT last_name FROM employees e WHERE NOT EXISTS ( SELECT 1 FROM departments d WHERE d.deparment_id = e.department_id); SELECT last_name FROM employees e WHERE departmnet_id NOT IN ( SELECT NVL(departmnet_id, 0) FROM departments d); SELECT last_name FROM employees e WHERE departmnet_id NOT IN ( SELECT departmnet_id FROM departments d WHERE deparmtnet_id IS NOT NULL); 67. Znaleźć departamenty w których nie ma pracowników. 68. Znaleźć pracowników zarabiających maksymalną pensję na ich stanowiskach pracy. Uporządkować ich według malejących zarobków. 69. Znaleźć pracowników zarabiających minimalną pensję na ich stanowiskach pracy. Uporządkować ich według malejących zarobków. 70. Wskazać dla każdego departamentu ostatnio zatrudnionych pracowników. Uporządkować według dat zatrudnienia. 71. Podać ENAME, SAL i DEPTNO dla pracowników, których zarobki przekraczają średnią ich departamentów. 72. Stosując podzapytanie znaleźć departamenty, w których nikt nie pracuje. 73. Wskazać pracowników, których płaca SAL należy do trzech najwyższych płac w firmie. Podać ich nazwiska i pensje. 74. Podać ENAME, SALARY i DEPTNO i DEPT_AVG (średnia zarobków w departamencie) dla pracowników, których zarobki przekraczają średnią ich departamentów. 75. Napisać zapytanie generujące listę pracowników i ich dat zatrudnienia, z gwiazdką (*) w wierszu ostatnio zatrudnionego. Kolumnę z gwiazdką zatytułuj MAXDATE.